#ifndef CAMERA_HH_
# define CAMERA_HH_

# include <math/vector.hh>
# include "../gui/window.hh"

class Camera
{
public:
  Camera (const Vector3f& pos, Window* w);
  ~Camera ();

  virtual void move (const Vector3f& val) = 0;

  void view ();

  const Vector3f& pos () const { return this->pos_; }
  Vector3f& pos_get () { return this->pos_; }

  virtual void set_angles (float val_x, float val_y) = 0;
  virtual void calc_vect () = 0;

  Vector3f get_forward ();
  void time_set (float elapsed_time);

  virtual Vector3f* get_3D_point (int x, int y) = 0;

  virtual void scroll_up () = 0;
  virtual void scroll_down () = 0;

protected:
  Vector3f pos_;
  float teta;
  float phi;
  Vector3f target_;
  Vector3f forward_;
  Vector3f left_;
  Vector3f up_;
  float time_;

  // data needed for for raycaster
  float y_val;
  float x_val;
};

#endif /// !CAMERA_HH_
